/**
 * 店铺信息收集
 */
export const questionStatusArr = [
    {
        key: '100',
        value: '待填写'
    },
    {
        key: '300',
        value: '待确认'
    },
    {
        key: '500',
        value: '待重填'
    },
    {
        key: '700',
        value: '已确认'
    },
]

/**
 * 实施状态
 */
export const carryOutStatusList = [
    {
        key: '100',
        value: '筹备中'
    },
    {
        key: '200',
        value: '待施工'
    },
    {
        key: '400',
        value: '待再次施工'
    },
    {
        key: '300',
        value: '施工中'
    },
    {
        key: '500',
        value: '挂起'
    },
    {
        key: '600',
        value: '待测试验收'
    },
    {
        key: '700',
        value: '待商家验收'
    },
    {
        key: '900',
        value: '已交付'
    },
]

/**
 * 施工方状态
 */
export const workSideList = [
    {
        key: 0,
        value: '待确认'
    },
    {
        key: 1,
        value: '已确认'
    },
]

/**
 * 物流公司
 */
export const logisticsCompanys = [
    {
        key: 1,
        value: '顺丰'
    },
    {
        key: 2,
        value: '中通'
    },
    {
        key: 3,
        value: '圆通'
    },
    {
        key: 4,
        value: '韵达'
    },
    {
        key: 5,
        value: '京东'
    },
    {
        key: 6,
        value: '申通'
    },
    {
        key: 0,
        value: '其他'
    },
]

/**
 * 验收状态
 */
export const acceptanceStatusList = [
    {
        key: 10,
        value: '待填写'
    },
    {
        key: 20,
        value: '待测试验收'
    },
    {
        key: 30,
        value: '待重填'
    },
    {
        key: 40,
        value: '验收通过'
    },
]

/**
 * 广告物料状态
 */
export const adStatusArr = [
    {
        key: '10',
        value: '未开始'
    },
    {
        key: '20',
        value: '待测量'
    },
    {
        key: '30',
        value: '待出图'
    },
    {
        key: '40',
        value: '待商家确认'
    },
    {
        key: '50',
        value: '待制作'
    },
    {
        key: '60',
        value: '制作中'
    },
    {
        key: '70',
        value: '待发出'
    },
    {
        key: '80',
        value: '已发货'
    },
    {
        key: '90',
        value: '已签收'
    }
]

/**
 * 硬件设备状态
 */
export const hardwareStatusArr = [
    {
        key: '10',
        value: '未开始'
    },
    {
        key: '20',
        value: '组装中'
    },
    {
        key: '30',
        value: '组装完成'
    },
    {
        key: '40',
        value: '硬件验收完成'
    },
    {
        key: '50',
        value: '调试完成'
    },
    {
        key: '60',
        value: '已发货'
    },
    {
        key: '70',
        value: '已签收'
    }
]

/**
 * 比较俩个对象之间的差异，监听表单数据是否改动
 * 如果数据改动，则返回新旧对象记录改动字段的新旧值
 * */
export function diffObj(obj1, obj2) {
    function getTypeByObj(obj) {
        return Object.prototype.toString.call(obj).match(/^\[object ([a-zA-Z]*)\]$/)[1];
    }
    function isEmptyObject(obj) {
        for (let key in obj) {
            return false;
        };
        return true;
    }
    if (!obj1 || isEmptyObject(obj1) || !obj2 || isEmptyObject(obj2)) {
        return null;
    }
    let diffRes = {
        old_val: {},
        new_val: {}
    };
    for (let k in obj2) {
        // 判断数据类型是否一致
        if (getTypeByObj(obj2[k]) === getTypeByObj(obj1[k])) {
            // 比较 “Array”和“Object”类型
            if (getTypeByObj(obj2[k]) === 'Array' || getTypeByObj(obj2[k]) === 'Object') {
                const diffData = diffObj(obj1[k], obj2[k]);
                if (!isEmptyObject(diffData)) {
                    diffRes.old_val[k] = diffData.old_val;
                    diffRes.new_val[k] = diffData.new_val;
                }
            } else if (obj1[k] !== obj2[k]) { // 比较其他类型数据
                diffRes.old_val[k] = obj1[k];
                diffRes.new_val[k] = obj2[k];
            }
        } else {
            if ([undefined, null, ''].includes(obj1[k]) && [undefined, null, ''].includes(obj2[k])) {
                // 这三类数据可视为相等，不做处理
            } else {
                diffRes.old_val[k] = obj1[k];
                diffRes.new_val[k] = obj2[k];
            }
        }
    }
    // 若没有变化，返回null
    if (isEmptyObject(diffRes.old_val) || isEmptyObject(diffRes.new_val)) {
        return null;
    }
    return diffRes;
}